home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
PRUS101.ZIP
/
FCONDRV.DOC
< prev
next >
Wrap
Text File
|
1994-08-04
|
6KB
|
130 lines
Paul Schubert
Rottweiler Str. 8
D60327 Frankfurt / M
Tel.: 069 / 231145
Fido 2:244/1181.18
Beschreibung der UNIT FCONDRV
─────────────────────────────
FCONDRV entstand im Zuge des PRUSSG Projekts.
Es ging mir hauptsächlich darum, daß ich nicht auf den Komfort der
Ausgabeformatierung mittels WRITE() verzichten, aber dafür nicht von CRT
abhängig sein wollte.
FCONDRV enthält hauptsächlich einen CON: Treiber für WRITE(), der direkt
auf den Textmodus Videospeicher zugreift. Es hat sich ergeben, daß einige
Prozeduren aus CRT in einem so engen Zusammenhang mit diesem Treiber
stehen, daß sie unbedingt mit in der Unit integriert sein müssen.
Ebenso wollte ich nicht auf WINDOW verzichten, welches somit auch
in FCONDRV enthalten ist. Es hat sich gezeigt, daß es einige sehr leicht
zu programmierende aber extrem nützliche Zusätze zu den CRT Funktionen
gibt, die ich sogleich mit einfließen ließ.
Derzeit kann FCONDRV nur direkt ins Videoram schreiben, die UNIT
bietet aber die Möglichkeit, sowohl eine BIOS Ausgabe als auch einige
andere nützliche Dinge zu implementieren - insbesondere denke ich da an
Terminal Emulationen bzw. einen extrem schnellen Treiber, der zwar
<cr> und <lf> nicht beachtet, dafür aber etwa 4 mal so schnell ausgibt.
Ich habe großen Wert darauf gelegt, daß FCONDRV mit allen Text Videomodi
zurecht kommt, die korrekte Werte ins BIOS RAM auf $40:0... eintragen
und auch problemlos gemischt mit BIOS Ausgabefunktionen und im Betrieb
mit bis zu 8 Bildschirmseiten arbeiten kann. Sollte dies an der einen
oder anderen Stelle nicht gelungen sein, bitte ich darum, mich sofort
zu benachrichtigen.
Es ist recht unwahrscheinlich, daß es vom BIOS einstellbare Text
Videomodi gibt, die die Einträge im BIOS RAM nicht aktualisieren, weil
das Video BIOS sonst selbst nicht richtig auf den Bildschirm schreiben
könnte. Wer unbedingt 'tweaked' Textmodi benutzen will, die durch
direkte Registerprogrammierung der VGA eingestellt werden, der muß
leider sowohl auf die Textausgabe mittels BIOS als auch mittels FCONDRV
verzichten.
Eventuell kann FCONDRV auch in tweaked Textmodi ( z.B. für Softscrolling )
verwandt werden, wenn nach dem Umprogrammieren des CRT Controllers die
aktuellen Werte im BIOS RAM eingetragen werden und danach REINITCRT
aufgerufen wird.
FCONDRV ersetzt folgende CRT Prozeduren, Funktionen und Variablen :
TEXTATTR : BYTE = 7;
Enthält das Textattribut zum Schreiben via WRITE()
WINDMIN : WORD = 0;
WINDMAX : WORD = 24 SHL 8 + 79;
Enthält die aktuellen Fensterkoordinaten
DIRECTVIDEO : BOOLEAN = TRUE;
Ist DIRECTVIDEO = TRUE, wird ohne BIOS in den Bildschirmspeicher
geschrieben, bei DIRECTVIDEO := FALSE; wird über die Video BIOS
Funktionen geschrieben.
Letzteres hat vor allem den Vorteil, daß die Textausgabe auch in den
Grafik Videomodi ( außer 'tweaked' Modi ) funktioniert. Es birgt aber
einen Nachteil : Die Lösch- und Scrollfunktionen funktionieren nur
auf Videopage 0 ! Dieser Nachteil ist in der Funktion des Video BIOS
begründet.
PROCEDURE CASSIGN(VAR F:TEXT);
Entspricht etwa ASSIGNCRT aus CRT, muß aber wie folgt benutzt werden :
CASSIGN(OUTPUT);
REWRITE(OUTPUT);
Daß die Filevariable angegeben werden muß, hat m.e. den Vorteil, daß
sich auch andere Files als OUTPUT zuweisen lassen.
Folgende Prozeduren und Funktionen arbeiten mit WINDOW zusammen :
PROCEDURE WINDOW(X1,Y1,X2,Y2:BYTE);
PROCEDURE CLRSCR;
PROCEDURE GOTOXY(X,Y:BYTE);
FUNCTION WHEREX:BYTE;
FUNCTION WHEREY:BYTE;
PROCEDURE CLREOL;
Die Funktionen entsprechen denen von CRT, ich muß aber anmerken, daß
GOTOXY nicht überprüft, ob die angegebene Cursorposition außerhalb des
WINDOWs liegt.
WINDOW dürfte nicht korrekt mit mehreren Bildschirmseiten zusammen
arbeiten - es gibt nur 1 WINDOW, auf das sich die Ausgaben in der
aktuellen Bildschirmseite beziehen. Sollten separate WINDOWs für jede
Bildschirmseite wünschenswert sein, bitte ich um Benachrichtigung.
Einige Prozeduren habe ich selbst definiert :
PROCEDURE CLREOS;
Clear to End of Screen - ähnlich CLREOL, löscht ab der Cursorposition
bis zum Ende des durch WINDOW eingestellten Fensters.
PROCEDURE REINITCRT;
Da FCONDRV mit verschiedenen Videomodi arbeiten kann, ist es nötig,
nach Ändern des Videomodus REINITCRT aufzurufen, damit FCONDRV sich auf
den neuen Videomodus einstellen kann.
PROCEDURE PUSHWINDOW;
PROCEDURE POPWINDOW;
Diese Prozeduren können Fensterinhalte auf den Heap speichern bzw.
vom Heap restaurieren - sie können mehrmals hintereinander benutz werden
und arbeiten nach dem First In First Out Prinzip.
Gespeichert wird jeweils der Bildschirminhalt des aktuellen durch
WINDOW eingestellten Fensters.
PUSHWINDOW und POPWINDOW arbeiten immer auf der Aktuellen Bildschirmseite,
sodaß es möglich ist, damit Bildschirminhalte von einer Seite auf eine
andere zu kopieren.
Folgende Prozeduren und Funktionen arbeiten unabhängig vom WINDOW immer
auf den gesamten Bildschirm bezogen :
PROCEDURE CLRSCRABSOLUTE;
Entspricht CLRSCR - löscht immer den ganzen Bildschirm
PROCEDURE GOTOXYABSOLUTE(X,Y:BYTE);
Entspricht GOTOXY, positioniert den Cursor immer relativ zur oberen
linken Bildschirmecke.
FUNCTION WHEREXABSOLUTE:BYTE;
FUNCTION WHEREYABSOLUTE:BYTE;
Entsprechen WHEREX und WHEREY, liefern immer die Cursorposition relativ
zur linken oberen Bildschirmecke.